package com.jyw.business.ast.domain.dto.web;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.jyw.business.ast.domain.AstInfo;
import com.jyw.common.constant.Constants;
import com.jyw.common.utils.DateUtils;
import com.jyw.common.utils.SecurityUtils;
import com.jyw.system.domain.vo.SimpleFileVo;
import com.jyw.system.utils.FileUtils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.beans.BeanUtils;
import org.springframework.util.ObjectUtils;

import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * @author 沈峻
 * @ClassName AstEditDto
 * @Description 资产编辑请求实体
 * @Date 2023/9/20 10:20
 **/
@Data
@ApiModel("资产编辑请求实体")
public class AstEditDto {

    @ApiModelProperty("id")
    @NotNull(message = "id不允许为空")
    private Long id;

    /** 名称 */
    @ApiModelProperty("名称")
    private String name;

    /** 规格型号 */
    @ApiModelProperty("规格型号")
    private String model;

    /** 使用日期 */
    @ApiModelProperty("使用日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date useDate;

    /** 使用年限 */
    @ApiModelProperty("使用年限")
    private BigDecimal years;

    @ApiModelProperty("使用年限单位")
    private String useUnit;

    /** 设备状态(数据字典) */
    @ApiModelProperty("设备状态(数据字典)")
    private String equipmentState;

    /** 资产类型(数据字典) */
    @ApiModelProperty("资产类型(数据字典)")
    private String assetsType;

    /** 资产来源(数据字典) */
    @ApiModelProperty("资产来源(数据字典)")
    private String assetsSource;

    /** 资产编号 */
    @ApiModelProperty("资产编号")
    private String assetsCode;

    /** 设备S/N码 */
    @ApiModelProperty("设备S/N码")
    private String seriesNumb;

    /** 是否公共设备  */
    @ApiModelProperty("是否公共设备 ")
    private Integer isPublic;

    /** 计量周期 */
    @ApiModelProperty("保养维护周期")
    private Integer meteringTimer;

    @ApiModelProperty("保养维护周期单位(数据字典)")
    private String meteringUnit;

    /** 使用科室 */
    @ApiModelProperty("使用科室")
    private Long useDept;

    /** 所在位置 */
    @ApiModelProperty("所在位置")
    private String place;

    /** 使用责任人 */
    @ApiModelProperty("使用责任人")
    private Long personLiable;

    /** 维保期限 */
    @ApiModelProperty("维保期限")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date maintainTerm;

    /** 维保公司 */
    @ApiModelProperty("维保公司")
    private Long maintainCompany;

    /** 维保责任人 */
    @ApiModelProperty("维保责任人")
    private Long maintainUser;

    /** 资产维护类型(1用户 2小组 3科室) */
    @ApiModelProperty("资产维护类型(1用户 2小组 3科室)")
    private Integer maintainInsideType;

    /** 指定维护对象标识 */
    @ApiModelProperty("指定维护对象标识")
    private Long maintainObjId;

    /** 备注 */
    @ApiModelProperty("备注")
    private String remark;

    /** 附件 */
    @ApiModelProperty("附件")
    private List<SimpleFileVo> enclosure;

    /** 采购编号 */
    @ApiModelProperty("采购编号")
    private String purchaseCode;

    /** 项目名称 */
    @ApiModelProperty("项目名称")
    private String projectName;

    /** 采购日期 */
    @ApiModelProperty("采购日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date purchaseDate;

    /** 采购价格 */
    @ApiModelProperty("采购价格")
    private BigDecimal purchasePrice;

    /** 采购数量 */
    @ApiModelProperty("采购数量")
    private Long purchaseNumber;

    /** 品牌(数据字典) */
    @ApiModelProperty("品牌(数据字典)")
    private String brand;

    /** 生产厂商 */
    @ApiModelProperty("生产厂商")
    private String manufacturer;

    /** 售后电话 */
    @ApiModelProperty("售后电话")
    private String salesPhone;

    /** 供应商 */
    @ApiModelProperty("供应商")
    private String supplier;

    /** 供应商电话 */
    @ApiModelProperty("供应商电话")
    private String supplierPhone;

    /** 产地 */
    @ApiModelProperty("产地")
    private String originPlace;

    /** IP地址 */
    @ApiModelProperty("IP地址")
    private String ipPlace;

    /** MAC地址 */
    @ApiModelProperty("MAC地址")
    private String macPlace;

    /** 操作系统(数据字典) */
    @ApiModelProperty("操作系统(数据字典)")
    private String operatingSystem;

    /** 系统版本 */
    @ApiModelProperty("系统版本")
    private String systemVersion;

    /** 配置信息 */
    @ApiModelProperty("配置信息")
    private String configuration;

    @ApiModelProperty("所属巡检单元")
    private Long pertainUnit;


    public AstInfo buildAstInfo(){
        AstInfo info = new AstInfo();
        BeanUtils.copyProperties(this,info);
        info.setEnclosure(FileUtils.fileToId(getEnclosure()));
        info.setUpdateUser(SecurityUtils.getUserId());
        info.setUpdateTime(DateUtils.getNowDate());

        if(!ObjectUtils.isEmpty(getUseDate())){
            //设置使用截止时间
            if (!ObjectUtils.isEmpty(getUseUnit())&&!ObjectUtils.isEmpty(getYears())) {
                info.setUseOverDate(DateUtils.calcAstDate(getUseDate(),getYears(),getUseUnit()));
            }
            //设置下次保养时间
            if (!ObjectUtils.isEmpty(getMeteringUnit())&&!ObjectUtils.isEmpty(getMeteringTimer())) {
                info.setNextMeteringDate(DateUtils.calcAstDate(getUseDate(),BigDecimal.valueOf(getMeteringTimer()),getMeteringUnit()));
            }
        }
        return info;
    }
}
